diff --git a/Demo/Makefile.am b/Demo/Makefile.am
new file mode 100644
--- /dev/null
+++ b/Demo/Makefile.am
@@ -0,0 +1,131 @@
+AM_CPPFLAGS = -I$(top_srcdir)/Include $(UFCONFIG_CFLAGS)
+LDADD = $(top_builddir)/Source/libcxsparse.la
+
+noinst_HEADERS = \
+	cs_demo.h \
+	cs_ci_demo.h \
+	cs_cl_demo.h \
+	cs_di_demo.h \
+	cs_dl_demo.h
+
+check_PROGRAMS = \
+	cs_demo1 \
+	cs_demo2 \
+	cs_demo3 \
+	cs_ci_demo1 \
+	cs_ci_demo2 \
+	cs_ci_demo3 \
+	cs_cl_demo1 \
+	cs_cl_demo2 \
+	cs_cl_demo3 \
+	cs_di_demo1 \
+	cs_di_demo2 \
+	cs_di_demo3 \
+	cs_dl_demo1 \
+	cs_dl_demo2 \
+	cs_dl_demo3 \
+	cs_idemo \
+	cs_ldemo
+
+cs_demo1_SOURCES = cs_demo1.c
+cs_demo2_SOURCES = cs_demo2.c cs_demo.c
+cs_demo3_SOURCES = cs_demo3.c cs_demo.c
+cs_ci_demo1_SOURCES = cs_ci_demo1.c
+cs_ci_demo2_SOURCES = cs_ci_demo2.c cs_ci_demo.c
+cs_ci_demo3_SOURCES = cs_ci_demo3.c cs_ci_demo.c
+cs_cl_demo1_SOURCES = cs_cl_demo1.c
+cs_cl_demo2_SOURCES = cs_cl_demo2.c cs_cl_demo.c
+cs_cl_demo3_SOURCES = cs_cl_demo3.c cs_cl_demo.c
+cs_di_demo1_SOURCES = cs_di_demo1.c
+cs_di_demo2_SOURCES = cs_di_demo2.c cs_di_demo.c
+cs_di_demo3_SOURCES = cs_di_demo3.c cs_di_demo.c
+cs_dl_demo1_SOURCES = cs_dl_demo1.c
+cs_dl_demo2_SOURCES = cs_dl_demo2.c cs_dl_demo.c
+cs_dl_demo3_SOURCES = cs_dl_demo3.c cs_dl_demo.c
+
+cs_idemo_SOURCES = cs_idemo.c
+cs_ldemo_SOURCES = cs_ldemo.c
+cs_ldemo_CPPFLAGS = $(AM_CPPFLAGS) -DCS_LONG
+
+MATRICES = \
+	../Matrix/ash219 \
+	../Matrix/bcsstk01 \
+	../Matrix/bcsstk16 \
+	../Matrix/c4 \
+	../Matrix/c_mbeacxc \
+	../Matrix/c_west0067 \
+	../Matrix/fs_183_1 \
+	../Matrix/lp_afiro \
+	../Matrix/mbeacxc \
+	../Matrix/mhd1280b \
+	../Matrix/neumann \
+	../Matrix/qc324 \
+	../Matrix/t1 \
+	../Matrix/t2 \
+	../Matrix/t3 \
+	../Matrix/t4 \
+	../Matrix/west0067 \
+	../Matrix/young1c
+
+check-local: $(check_PROGRAMS) $(MATRICES)
+	-./cs_demo1 < ../Matrix/t1
+	-./cs_demo2 < ../Matrix/t1
+	-./cs_demo2 < ../Matrix/fs_183_1
+	-./cs_demo2 < ../Matrix/west0067
+	-./cs_demo2 < ../Matrix/lp_afiro
+	-./cs_demo2 < ../Matrix/ash219
+	-./cs_demo2 < ../Matrix/mbeacxc
+	-./cs_demo2 < ../Matrix/bcsstk01
+	-./cs_demo3 < ../Matrix/bcsstk01
+	-./cs_demo2 < ../Matrix/bcsstk16
+	-./cs_demo3 < ../Matrix/bcsstk16
+	-./cs_di_demo1 < ../Matrix/t1
+	-./cs_di_demo2 < ../Matrix/t1
+	-./cs_di_demo2 < ../Matrix/fs_183_1
+	-./cs_di_demo2 < ../Matrix/west0067
+	-./cs_di_demo2 < ../Matrix/lp_afiro
+	-./cs_di_demo2 < ../Matrix/ash219
+	-./cs_di_demo2 < ../Matrix/mbeacxc
+	-./cs_di_demo2 < ../Matrix/bcsstk01
+	-./cs_di_demo3 < ../Matrix/bcsstk01
+	-./cs_di_demo2 < ../Matrix/bcsstk16
+	-./cs_di_demo3 < ../Matrix/bcsstk16
+	-./cs_dl_demo1 < ../Matrix/t1
+	-./cs_dl_demo2 < ../Matrix/t1
+	-./cs_dl_demo2 < ../Matrix/fs_183_1
+	-./cs_dl_demo2 < ../Matrix/west0067
+	-./cs_dl_demo2 < ../Matrix/lp_afiro
+	-./cs_dl_demo2 < ../Matrix/ash219
+	-./cs_dl_demo2 < ../Matrix/mbeacxc
+	-./cs_dl_demo2 < ../Matrix/bcsstk01
+	-./cs_dl_demo3 < ../Matrix/bcsstk01
+	-./cs_dl_demo2 < ../Matrix/bcsstk16
+	-./cs_dl_demo3 < ../Matrix/bcsstk16
+	-./cs_ci_demo1 < ../Matrix/t2
+	-./cs_ci_demo2 < ../Matrix/t2
+	-./cs_ci_demo2 < ../Matrix/t3
+	-./cs_ci_demo2 < ../Matrix/t4
+	-./cs_ci_demo2 < ../Matrix/c_west0067
+	-./cs_ci_demo2 < ../Matrix/c_mbeacxc
+	-./cs_ci_demo2 < ../Matrix/young1c
+	-./cs_ci_demo2 < ../Matrix/qc324
+	-./cs_ci_demo2 < ../Matrix/neumann
+	-./cs_ci_demo2 < ../Matrix/c4
+	-./cs_ci_demo3 < ../Matrix/c4
+	-./cs_ci_demo2 < ../Matrix/mhd1280b
+	-./cs_ci_demo3 < ../Matrix/mhd1280b
+	-./cs_cl_demo1 < ../Matrix/t2
+	-./cs_cl_demo2 < ../Matrix/t2
+	-./cs_cl_demo2 < ../Matrix/t3
+	-./cs_cl_demo2 < ../Matrix/t4
+	-./cs_cl_demo2 < ../Matrix/c_west0067
+	-./cs_cl_demo2 < ../Matrix/c_mbeacxc
+	-./cs_cl_demo2 < ../Matrix/young1c
+	-./cs_cl_demo2 < ../Matrix/qc324
+	-./cs_cl_demo2 < ../Matrix/neumann
+	-./cs_cl_demo2 < ../Matrix/c4
+	-./cs_cl_demo3 < ../Matrix/c4
+	-./cs_cl_demo2 < ../Matrix/mhd1280b
+	-./cs_cl_demo3 < ../Matrix/mhd1280b
+	-./cs_idemo < ../Matrix/t2
+	-./cs_ldemo < ../Matrix/t2
diff --git a/Include/Makefile.am b/Include/Makefile.am
new file mode 100644
--- /dev/null
+++ b/Include/Makefile.am
@@ -0,0 +1,2 @@
+pkgincludedir = $(includedir)/cxsparse
+pkginclude_HEADERS = cs.h
diff --git a/Makefile.am b/Makefile.am
new file mode 100644
--- /dev/null
+++ b/Makefile.am
@@ -0,0 +1,5 @@
+SUBDIRS = Include Source Matrix Demo
+EXTRA_DIST = README.txt Doc/ChangeLog Doc/License.txt Doc/lesser.txt
+
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = cxsparse.pc
diff --git a/Matrix/Makefile.am b/Matrix/Makefile.am
new file mode 100644
--- /dev/null
+++ b/Matrix/Makefile.am
@@ -0,0 +1,23 @@
+dist_noinst_DATA = \
+	ash219 \
+	bcsstk01 \
+	bcsstk16 \
+	c4 \
+	c_ibm32a \
+	c_ibm32b \
+	c_mbeacxc \
+	c_west0067 \
+	fs_183_1 \
+	ibm32a \
+	ibm32b \
+	lp_afiro \
+	mbeacxc \
+	mhd1280b \
+	neumann \
+	qc324 \
+	t1 \
+	t2 \
+	t3 \
+	t4 \
+	west0067 \
+	young1c
diff --git a/Source/Makefile.am b/Source/Makefile.am
new file mode 100644
--- /dev/null
+++ b/Source/Makefile.am
@@ -0,0 +1,72 @@
+AM_CPPFLAGS = -I$(top_srcdir)/Include $(UFCONFIG_CFLAGS)
+
+CS_SOURCE = \
+	cs_add.c \
+	cs_amd.c \
+	cs_chol.c \
+	cs_cholsol.c \
+	cs_compress.c \
+	cs_counts.c \
+	cs_cumsum.c \
+	cs_dfs.c \
+	cs_dmperm.c \
+	cs_droptol.c \
+	cs_dropzeros.c \
+	cs_dupl.c \
+	cs_entry.c \
+	cs_ereach.c \
+	cs_etree.c \
+	cs_fkeep.c \
+	cs_gaxpy.c \
+	cs_happly.c \
+	cs_house.c \
+	cs_ipvec.c \
+	cs_leaf.c \
+	cs_load.c \
+	cs_lsolve.c \
+	cs_ltsolve.c \
+	cs_lu.c \
+	cs_lusol.c \
+	cs_malloc.c \
+	cs_maxtrans.c \
+	cs_multiply.c \
+	cs_norm.c \
+	cs_permute.c \
+	cs_pinv.c \
+	cs_post.c \
+	cs_print.c \
+	cs_pvec.c \
+	cs_qr.c \
+	cs_qrsol.c \
+	cs_randperm.c \
+	cs_reach.c \
+	cs_scatter.c \
+	cs_scc.c \
+	cs_schol.c \
+	cs_spsolve.c \
+	cs_sqr.c \
+	cs_symperm.c \
+	cs_tdfs.c \
+	cs_transpose.c \
+	cs_updown.c \
+	cs_usolve.c \
+	cs_util.c \
+	cs_utsolve.c
+
+lib_LTLIBRARIES = libcxsparse.la
+noinst_LTLIBRARIES = libcxsparse_di.la libcxsparse_dl.la libcxsparse_ci.la libcxsparse_cl.la
+
+libcxsparse_di_la_SOURCES = $(CS_SOURCE)
+
+libcxsparse_dl_la_SOURCES = $(CS_SOURCE)
+libcxsparse_dl_la_CPPFLAGS = $(AM_CPPFLAGS) -DCS_LONG
+
+libcxsparse_ci_la_SOURCES = $(CS_SOURCE)
+libcxsparse_ci_la_CPPFLAGS = $(AM_CPPFLAGS) -DCS_COMPLEX
+
+libcxsparse_cl_la_SOURCES = $(CS_SOURCE)
+libcxsparse_cl_la_CPPFLAGS = $(AM_CPPFLAGS) -DCS_LONG -DCS_COMPLEX
+
+libcxsparse_la_SOURCES = cs_convert.c
+libcxsparse_la_LIBADD = libcxsparse_di.la libcxsparse_dl.la libcxsparse_ci.la libcxsparse_cl.la -lm
+libcxsparse_la_LDFLAGS = -no-undefined -version-info 4:5:2
diff --git a/configure.ac b/configure.ac
new file mode 100644
--- /dev/null
+++ b/configure.ac
@@ -0,0 +1,37 @@
+AC_PREREQ([2.68])
+AC_INIT([CXSparse],[2.2.5],[davis@cise.ufl.edu])
+AC_CONFIG_SRCDIR([Source/cs_print.c])
+AC_CONFIG_HEADER([config.h])
+AM_INIT_AUTOMAKE([foreign])
+LT_INIT
+
+AC_PROG_INSTALL
+AC_PROG_CC
+
+LIBS_SAVED=$LIBS
+
+AC_CHECK_LIB([m], [sqrt])
+
+AC_CHECK_HEADERS([limits.h stdlib.h])
+
+PKG_PROG_PKG_CONFIG
+PKG_CHECK_MODULES([UFCONFIG],[ufconfig],
+	[],
+	[AC_MSG_ERROR([cannot find ufconfig])])
+
+AC_TYPE_SIZE_T
+
+AC_FUNC_MALLOC
+AC_FUNC_REALLOC
+AC_CHECK_FUNCS([sqrt])
+
+LIBS=$LIBS_SAVED
+
+AC_CONFIG_FILES([
+	cxsparse.pc
+	Makefile
+	Demo/Makefile
+	Include/Makefile
+	Matrix/Makefile
+	Source/Makefile])
+AC_OUTPUT
diff --git a/cxsparse.pc.in b/cxsparse.pc.in
new file mode 100644
--- /dev/null
+++ b/cxsparse.pc.in
@@ -0,0 +1,12 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: @PACKAGE_NAME@
+Description: An extended version of CSparse
+Version: @PACKAGE_VERSION@
+Requires.private: ufconfig
+Libs: -L${libdir} -lcxsparse
+Libs.private: -lm
+Cflags: -I${includedir}/cxsparse
